#ifndef KMISWORDDB_H
#define KMISWORDDB_H
#include <QMap>

struct KpTestInfo;

// 错词数据库
class KgMiswordDb
{
public:
    KgMiswordDb(const QString& logDir);

    // 新的错词，更新错词记录
    void update(const KpTestInfo& info, const QString& word, bool wrong);

    bool save();

    // 返回按错误总数（各考核模式的错误累加）的排序列表，用于显示错题榜
    QList<QPair<QString, std::array<int, 8>>> sort() const;

    // 返回错词列表（使用对错次数进行综合排序，详见@countMisScore_），用于生成考核试卷
    QStringList topMiswords() const;

    static int countMis(const std::array<int, 8>& ar); // 返回答错总数

private:
    // 同时考虑答对和答错的次数，返回综合得分，答错1次得1分，答对1次得-0.5分，最低分为0分
    static float countMisScore_(const std::array<int, 8>& ar);

    // 返回存储错词的文件路径
    QString miswordsFilePath_() const;

private:
    // 映射到8元数组:
    //   [0]、[1]分别代表【听写】错、对次数
    //   [2]、[3]分别代表【音标写单词】错、对次数
    //   [4]、[5]分别代表【英译汉】错、对次数
    //   [6]、[7]分别代表【汉译英】错、对次数
    QMap<QString, std::array<int, 8>> miswords_;

    QString logDir_;
};

#endif // KMISWORDDB_H
